package com.demo.juc.volat;

import java.util.concurrent.TimeUnit;

/**
 * @Author: yaoshubin
 * @Date: 2023-07-20  13:36
 * @Description: Volatile  应用场景：
 * <p>
 * 1）标志位一个线程在某个条件满足时修改了一个 volatile 变量的值，其他线程可以通过读取该变量来感知状态的改变，从而执行相应的操作。
 * 2）双端检测
 * 3）实时数据更新
 */
public class VolatileVisitDemo {

    
    //boolean 值状态判断（实时通知）
    public /*volatile*/ static boolean flag = true;

    public static void main(String[] args) {

        new Thread(() -> {
            System.out.println("come in ...");
            while (flag) {

            }
            System.out.println("game over ...");
        }).start();


        try {
            TimeUnit.SECONDS.sleep(2);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }

        flag = false;

        System.out.println(Thread.currentThread().getName() + "执行完成, flag:" + flag);

    }


}
